﻿namespace Example.Runtime.InteropServices
{
    using System.Diagnostics.CodeAnalysis;

    /// <summary>Enumerates the ternary raster operations.</summary>
    /// <seealso href="http://msdn2.microsoft.com/library/ms534885(VS.85).aspx">MSDN</seealso>
    [SuppressMessage("Microsoft.Design", "CA1008:EnumsShouldHaveZeroValue", Justification = "The API does not define a value of zero.")]
    internal enum TernaryRasterOperations : uint
    {
        /// <summary>
        /// Fills the destination rectangle using the color associated with index 0 in the physical palette
        /// (This color is black for the default physical palette).
        /// </summary>
        [SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "BLACKNESS", Justification = "Following the WIN API.")]
        Blackness = 0x00000042,

        /// <summary>Inverts the destination rectangle.</summary>
        [SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "DSTINVERT", Justification = "Following the WIN API.")]
        Dstinvert = 0x00550009,

        /// <summary>
        /// Merges the colors of the source rectangle with the brush currently selected in hdcDest, by using the Boolean AND operator.
        /// </summary>
        [SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "MERGECOPY", Justification = "Following the WIN API.")]
        Mergecopy = 0x00C000CA,

        /// <summary>
        /// Merges the colors of the inverted source rectangle with the colors of the destination rectangle by using the Boolean OR operator.
        /// </summary>
        [SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "MERGEPAINT", Justification = "Following the WIN API.")]
        Mergepaint = 0x00BB0226,

        /// <summary>Copies the inverted source rectangle to the destination.</summary>
        [SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "NOTSRCCOPY", Justification = "Following the WIN API.")]
        Notsrccopy = 0x00330008,

        /// <summary>
        /// Combines the colors of the source and destination rectangles by using the Boolean OR operator and then inverts the resultant color.
        /// </summary>
        [SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "NOTSRCERASE", Justification = "Following the WIN API.")]
        Notsrcerase = 0x001100A6,

        /// <summary>Copies the brush currently selected in hdcDest, into the destination bitmap.</summary>
        [SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "PATCOPY", Justification = "Following the WIN API.")]
        Patcopy = 0x00F00021,

        /// <summary>
        /// Combines the colors of the brush currently selected in hdcDest,
        /// with the colors of the destination rectangle by using the Boolean XOR operator.
        /// </summary>
        [SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "PATINVERT", Justification = "Following the WIN API.")]
        Patinvert = 0x005A0049,

        /// <summary>
        /// Combines the colors of the brush currently selected in hdcDest,
        /// with the colors of the inverted source rectangle by using the Boolean OR operator.
        /// The result of this operation is combined with the colors of the destination rectangle by using the Boolean OR operator.
        /// </summary>
        [SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "PATPAINT", Justification = "Following the WIN API.")]
        Patpaint = 0x00FB0A09,

        /// <summary>Combines the colors of the source and destination rectangles by using the Boolean AND operator.</summary>
        [SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "SRCAND", Justification = "Following the WIN API.")]
        Srcand = 0x008800C6,

        /// <summary>Copies the source rectangle directly to the destination rectangle.</summary>
        [SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "SRCCOPY", Justification = "Following the WIN API.")]
        Srccopy = 0x00CC0020,

        /// <summary>
        /// Combines the inverted colors of the destination rectangle with the colors of the source rectangle by using the Boolean AND operator.
        /// </summary>
        [SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "SRCERASE", Justification = "Following the WIN API.")]
        Srcerase = 0x00440328,

        /// <summary>Combines the colors of the source and destination rectangles by using the Boolean XOR operator.</summary>
        [SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "SRCINVERT", Justification = "Following the WIN API.")]
        Srcinvert = 0x00660046,

        /// <summary>Combines the colors of the source and destination rectangles by using the Boolean OR operator.</summary>
        [SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "SRCPAINT", Justification = "Following the WIN API.")]
        Srcpaint = 0x00EE0086,

        /// <summary>
        /// Fills the destination rectangle using the color associated with index 1 in the physical palette
        /// (This color is white for the default physical palette).
        /// </summary>
        [SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "WHITENESS", Justification = "Following the WIN API.")]
        Whiteness = 0x00FF0062
    }
}